const fs = require('fs');
const path = require('path');
const archiver = require('archiver');

// 创建发布包
function createReleasePackage() {
  const output = fs.createWriteStream('EasyOTP-v1.0.0.zip');
  const archive = archiver('zip', {
    zlib: { level: 9 } // 设置压缩级别
  });

  output.on('close', function() {
    console.log('✅ 发布包创建成功: EasyOTP-v1.0.0.zip');
    console.log('📦 总大小: ' + (archive.pointer() / 1024 / 1024).toFixed(2) + ' MB');
  });

  archive.on('error', function(err) {
    throw err;
  });

  archive.pipe(output);

  // 添加核心文件
  const files = [
    'manifest.json',
    'popup.html',
    'popup.js',
    'popup.css',
    'background.js',
    'content.js',
    'storage.js',
    'qrcode.js',
    'README.md',
    'LICENSE',
    'PRIVACY.md'
  ];

  files.forEach(file => {
    if (fs.existsSync(file)) {
      archive.file(file, { name: file });
      console.log(`📄 添加文件: ${file}`);
    } else {
      console.log(`⚠️  文件不存在: ${file}`);
    }
  });

  // 添加图标文件夹
  if (fs.existsSync('icons')) {
    archive.directory('icons/', 'icons/');
    console.log('📁 添加文件夹: icons/');
  }

  // 添加库文件文件夹
  if (fs.existsSync('libs')) {
    archive.directory('libs/', 'libs/');
    console.log('📁 添加文件夹: libs/');
  }

  archive.finalize();
}

// 检查必要文件
function checkRequiredFiles() {
  const requiredFiles = [
    'manifest.json',
    'popup.html',
    'popup.js',
    'background.js',
    'content.js',
    'icons/icon16.png',
    'icons/icon48.png',
    'icons/icon128.png'
  ];

  console.log('🔍 检查必要文件...');
  let allFilesExist = true;

  requiredFiles.forEach(file => {
    if (fs.existsSync(file)) {
      console.log(`✅ ${file}`);
    } else {
      console.log(`❌ ${file} - 文件缺失`);
      allFilesExist = false;
    }
  });

  return allFilesExist;
}

// 主函数
function main() {
  console.log('🚀 开始构建 EasyOTP 发布包...\n');

  if (!checkRequiredFiles()) {
    console.log('\n❌ 构建失败：缺少必要文件');
    process.exit(1);
  }

  console.log('\n📦 创建发布包...');
  createReleasePackage();
}

// 运行构建
if (require.main === module) {
  main();
}

module.exports = { createReleasePackage, checkRequiredFiles }; 